<?php
class Incpays {
  function __construct() {
  }

  public function select() {
  
    $data = new jqGridData();
    try
    {
// Только зарегистрированные пользователи могут видеть данные
		if( !isset($_SESSION['user_id']) || $_SESSION['user_id'] == 0 )
			throw new Exception(ERR_M::TIMEOUT_ERROR, 999);

		$rwd = $_SESSION['priv']->incpays->rwd;
		if( ($rwd & PERM_BITS::READ_ANY) == 0 ) throw new Exception(ERR_M::DATA_ACC_DISABLED, 99);

// Проверяем данные
        $page    = ( isset($_REQUEST["page"]) && $_REQUEST["page"] > 0 ) ? $_REQUEST["page"] : 1;
        $limit    = ( isset($_REQUEST["rows"]) && $_REQUEST["rows"] > 0 ) ? $_REQUEST["rows"] : 1;
        $sidx    = ( isset($_REQUEST["sidx"]) && $_REQUEST["sidx"] != '' ) ? $_REQUEST["sidx"] : 'incp_bank_date';
        $sord    = ( isset($_REQUEST["sord"]) && strtolower($_REQUEST["sord"]) == 'desc' ) ? 'DESC' : 'ASC';
        $search    = ( isset($_REQUEST["_search"]) && strtolower($_REQUEST["_search"]) == 'true') ? true : false;
 
// Открываем базу данных
		$db = App::me()->dbOpen();	

// Фильтр
        $whc = array();
        if( $search )
        {
            if(isset($_REQUEST["incp_id"]) && is_numeric($_REQUEST["incp_id"]) ) {
				$whc[] = "incp_id=" . $db->quote($_REQUEST["incp_id"]);
		    }
            
            if(isset($_REQUEST["incp_job_id"]) && ctype_digit($_REQUEST["incp_job_id"]) ) {
				$whc[] = "incp_job_id=" . $db->quote($_REQUEST["incp_job_id"]);
		    }
            
            if(isset($_REQUEST["incp_cli_id"]) && $_REQUEST["incp_cli_id"] != "") {
		    	$whc[] = "incp_cli_id=" . $db->quote($_REQUEST["incp_cli_id"]);
            }

            if(isset($_REQUEST["cli_name"]) && $_REQUEST["cli_name"] != "") {
		    	$whc[] = "cli_name LIKE " . $db->quote("%".$_REQUEST["cli_name"]."%");
            }

            if(isset($_REQUEST["incp_build_id"]) && $_REQUEST["incp_build_id"] != "") {
		    	$whc[] = "incp_build_id=" . $db->quote($_REQUEST["incp_build_id"]);
            }

            if(isset($_REQUEST["build_name"]) && $_REQUEST["build_name"] != "") {
		    	$whc[] = "build_name LIKE " . $db->quote("%".$_REQUEST["build_name"]."%");
            }
			
            if(isset($_REQUEST["incp_bank_date"]) && $_REQUEST["incp_bank_date"] != "") {
				$dt = '';
				if( preg_match( '/^(\d\d)\.(\d\d)\.(\d\d\d\d)$/', $_REQUEST["incp_bank_date"], $dmy ) )
					$dt = $dmy[3].'-'.$dmy[2].'-'.$dmy[1];
				elseif( preg_match( '/^(\d\d)\.(\d\d\d\d)$/', $_REQUEST["incp_bank_date"], $dmy ) )
					$dt = $dmy[2].'-'.$dmy[1];
				elseif( preg_match( '/^(\d\d\d\d)$/', $_REQUEST["incp_bank_date"], $dmy ) )
					$dt = $dmy[1];
				
				if( $dt )
					$whc[] = "incp_bank_date LIKE " . $db->quote("%".$dt."%");
            }
			
            if(isset($_REQUEST["incp_amount"]) && $_REQUEST["incp_amount"] != "") {
		    	$whc[] = "incp_amount LIKE " . $db->quote("%".$_REQUEST["incp_amount"]."%");
            }
			
            if(isset($_REQUEST["incp_pm_type"]) && $_REQUEST["incp_pm_type"] != "") {
		    	$whc[] = "incp_pm_type LIKE " . $db->quote("%".$_REQUEST["incp_pm_type"]."%");
            }
			
            if(isset($_REQUEST["incp_content"]) && $_REQUEST["incp_content"] != "") {
		    	$whc[] = "incp_content LIKE " . $db->quote("%".$_REQUEST["incp_content"]."%");
            }
			
            if(isset($_REQUEST["incp_account"]) && $_REQUEST["incp_account"] != "") {
		    	$whc[] = "incp_account LIKE " . $db->quote("%".$_REQUEST["incp_account"]."%");
            }
			
            if(isset($_REQUEST["incp_contract"]) && $_REQUEST["incp_contract"] != "") {
		    	$whc[] = "incp_contract LIKE " . $db->quote("%".$_REQUEST["incp_contract"]."%");
            }
			
            if(isset($_REQUEST["incp_comment"]) && $_REQUEST["incp_comment"] != "") {
		    	$whc[] = "incp_comment LIKE " . $db->quote("%".$_REQUEST["incp_comment"]."%");
            }
			
		}

// Фильтр привилегий
		if( $rwd & PERM_BITS::READ_OTH ) $whc[] = '1 = 1';
		elseif( $rwd & PERM_BITS::READ_GRP ) 
			$whc[] = 'incp_user_id IN (SELECT user_id FROM users WHERE cat_id = '.$_SESSION['cat_id'].')';
		elseif( $rwd & PERM_BITS::READ_OWN ) $whc[] = 'incp_user_id = '.$_SESSION['user_id'];
		else $whc[] = '1 = 0';
		
        $whereclaus = (count($whc) != 0 ) ? " WHERE " . implode(" AND ", $whc) : "";
		unset($whc);
            
// Получаем количество записей с учетом фильтра
        $join1 = "INNER JOIN clients ON clients.cli_id = incpays.incp_cli_id ";
        $join2 = "INNER JOIN builds ON builds.build_id = incpays.incp_build_id ";
		$join3 = "LEFT JOIN jobs ON jobs.job_id = incpays.incp_job_id ".
					"LEFT JOIN jobtypes ON jobtypes.jtp_id = jobs.job_jtp_id ".
					"LEFT JOIN inctypes ON inctypes.itp_jtp_id = jobtypes.jtp_id AND ".
							  "inctypes.itp_id = incpays.incp_itp_id ";
            
        $rs = $db->query( "SELECT COUNT(*) AS count FROM incpays ".$join1.$join2.$whereclaus );
		$row = $rs->fetchObject();
		$count = $row->count;
		$rs->closeCursor();
            
// Пустая таблица
        if ($count == 0)
			throw new Exception(ERR_M::SUCCESS, 0);
            
// Рассчитаем сколько всего страниц займут данные в БД
    	if( $count > 0 && $limit > 0) {
    		$total_pages = ceil($count/$limit);
    	} else {
    		$total_pages = 0;
    	}                  
 
		if ($page > $total_pages) $page=$total_pages;                  
 
		$start = $limit*$page - $limit;                   
		if($start < 0) $start = 0;                  
 
// Формируем запрос
		$sql =  "SELECT incp_id, incp_job_id, incp_bank_date, incp_amount, incp_itp_id, itp_code, ".
						"incp_pm_type, incp_cli_id, cli_name, incp_build_id, build_name, ".
						"incp_content, incp_account, incp_contract, incp_comment ".
				"FROM incpays ".$join1.$join2.$join3.$whereclaus." ORDER BY ".$sidx." ".$sord.
		            " LIMIT ".$start.", ".$limit;

		$rs = $db->query($sql);                  
 
// Формирование объекта для возврата
        
    	$data->page      = $page;
    	$data->total     = $total_pages;
    	$data->records   = $count;
    		
    // Строки данных для таблицы
		$i = 0;
		while($row = $rs->fetchObject() ) {
		
			$status = 0;
				
			preg_match( '/(\d\d\d\d)-(\d\d)-(\d\d)/', $row->incp_bank_date, $dmy );
			$data->rows[$i]['id'] = $row->incp_id;
			$data->rows[$i]['cell'] = array(
					$row->incp_id,
					$status,
					$dmy[3].'.'.$dmy[2].'.'.$dmy[1],
					$row->incp_amount,
					$row->incp_cli_id,
				    $row->cli_name,
					$row->incp_build_id,
				    $row->build_name,
					$row->incp_job_id,
					$row->incp_content,
					$row->incp_pm_type,
					$row->itp_code,
					$row->incp_itp_id,
					$row->incp_account,
					$row->incp_contract,
					$row->incp_comment
		    );
		    $i++;
		}
    }
	catch (PDOException $e) {
		$data->userdata->errcode = 1;
		$data->userdata->errmess = ERR_M::DATABASE_ERROR;
	}
    catch ( Exception $e ) {
		$data->userdata->errcode = $e->getCode();
		$data->userdata->errmess = $e->getMessage();
	}
 
	return $data;
  }
  
  
  public function insert() {

    $incp_job_id	= isset($_POST['incp_job_id']) ? trim(strip_tags($_POST['incp_job_id'])) : '';
    $incp_itp_id	= isset($_POST['incp_itp_id']) ? trim(strip_tags($_POST['incp_itp_id'])) : '';
    $incp_bank_date	= isset($_POST['incp_bank_date']) ? trim(strip_tags($_POST['incp_bank_date'])) : '';
    $incp_amount	= isset($_POST['incp_amount']) ? trim(strip_tags($_POST['incp_amount'])) : '';
    $incp_pm_type	= isset($_POST['incp_pm_type']) ? trim(strip_tags($_POST['incp_pm_type'])) : '';
    $incp_cli_id	= isset($_POST['incp_cli_id']) ? trim(strip_tags($_POST['incp_cli_id'])) : '';
    $cli_name 		= isset($_POST['cli_name']) ? trim(strip_tags($_POST['cli_name'])) : '';
    $incp_build_id	= isset($_POST['incp_build_id']) ? trim(strip_tags($_POST['incp_build_id'])) : '';
    $build_name		= isset($_POST['build_name']) ? trim(strip_tags($_POST['build_name'])) : '';
    $incp_content 	= isset($_POST['incp_content']) ? trim(strip_tags($_POST['incp_content'])) : '';
    $incp_account 	= isset($_POST['incp_account']) ? trim(strip_tags($_POST['incp_account'])) : '';
    $incp_contract	= isset($_POST['incp_contract']) ? trim(strip_tags($_POST['incp_contract'])) : '';
    $incp_comment	= isset($_POST['incp_comment']) ? trim(strip_tags($_POST['incp_comment'])) : '';
	
	$errcode = 0;
	$errmess = '';
    try
    {
// Открываем базу данных
		$db = App::me()->dbOpen();	

// Только зарегистрированные пользователи могут вносить данные
		if( !isset($_SESSION['user_id']) || $_SESSION['user_id'] == 0 )
			throw new Exception(ERR_M::TIMEOUT_ERROR, 999);
		$incp_user_id = $_SESSION['user_id'];
		
//Есть ли разрешение на вставку записей
		$rwd = $_SESSION['priv']->incpays->rwd;
		if( ($rwd & PERM_BITS::WRITE_OWN) == 0 ) throw new Exception(ERR_M::DATA_OPER_DISABLED, 99);

// Все ли данные переданы
		$errdata = "";
		
// incp_job_id
		if( !$incp_job_id || !ctype_digit($incp_job_id) )
			$errdata .= ($errdata?'<br>':'').'- Не указан идентификатор работы.';
			
// incp_itp_id
		if( !$incp_itp_id || !ctype_digit($incp_itp_id) )
			$errdata .= ($errdata?'<br>':'').'- Не указан идентификатор вида платежа.';
			
// incp_bank_date
		if( $incp_bank_date == '' ) $errdata .= ($errdata?'<br>':'')."- Не указана дата оплаты.";
		elseif( ( $incp_bank_date = Tools::check_date($incp_bank_date) ) === false )
			$errdata .= ($errdata?'<br>':'')."- Дата оплаты указана неправильно.";

// incp_amount			
		if( $incp_amount == '' ) $errdata .= ($errdata?'<br>':'')."- Не указана сумма оплаты.";
		else {
			$incp_amount = str_replace(',', '.', $incp_amount);
			if( !is_numeric( $incp_amount ) )
				$errdata .= ($errdata?'<br>':'')."- Неправильно указана сумма оплаты.";
		}
			
// incp_pm_type			
		if( $incp_pm_type == '' ) $errdata .= ($errdata?'<br>':'')."- Не указан вид платежа.";
/*		else {
			$incp_pm_type = preg_replace( '/[^A-Z0-9]/u', '', mb_strtoupper( $incp_pm_type, 'UTF-8') );
		} */
			
// incp_cli_id  cli_name			
		if( $cli_name == '' ) $errdata .= ($errdata?'<br>':'').'- Не указано имя клиента.';
		elseif( !ctype_digit( $incp_cli_id ) ) 
			$errdata .= ($errdata?'<br>':'').'- Не указан идентификатор клиента.';
		else {
// Проверяем наличие кода клиента в справочнике
			$recset = $db->query('SELECT cli_id FROM clients WHERE cli_id = '.$db->quote($incp_cli_id));                  
			$row = $recset->fetch(PDO::FETCH_ASSOC);
			if( !$row ) {
				$errdata .= ($errdata?'<br>':'').'- Неправильно указан идентификатор клиента.';
			}
			$recset->closeCursor();
		}
		
// incp_build_id  build_name
		if( $build_name == '' ) $errdata .= ($errdata?'<br>':'').'- Не указан шифр объекта.';
		elseif( !ctype_digit( $incp_build_id ) ) 
			$errdata .= ($errdata?'<br>':'').'- Не указан идентификатор объекта.';
		else {
// Проверяем наличие обьекта в справочнике
			$recset = $db->query('SELECT build_id FROM builds WHERE build_id = '.$db->quote($incp_build_id));                  
			$row = $recset->fetch(PDO::FETCH_ASSOC);
			if( !$row ) {
				$errdata .= ($errdata?'<br>':'').'- Неправильно указан идентификатор объекта.';
			}
			$recset->closeCursor();
		}

// incp_content
		if( $incp_content == '' ) $errdata .= ($errdata?'<br>':'').'- Не указано назначение платежа.';
		
// incp_account
		if( $incp_account == '' ) $errdata .= ($errdata?'<br>':'').'- Не указан номер счета.';
		
		if( $errdata ) throw new Exception($errdata, 1);
		
// Может быть платеж уже существует
		$incp_key1 = preg_replace( '/[^0-9]/u', '', $incp_bank_date );
		$incp_key2 = preg_replace( '/[^а-яіїa-z0-9]/u', '', mb_strtolower( $incp_account, 'UTF-8') );
		$incp_key  = substr( $incp_key1.' '.$incp_build_id.' '.$incp_key2, 0, 64);
		
		$sqlreq =	'SELECT incp_account, build_name, incp_bank_date FROM incpays '.
					'INNER JOIN builds ON builds.build_id = incpays.incp_build_id '.
					'WHERE incp_key = '.$db->quote($incp_key);
		$recset = $db->query( $sqlreq );
		
		$row = $recset->fetch(PDO::FETCH_ASSOC);
		if( $row ) {
			throw new Exception('Счет с номером "'.$row['incp_account'].'" по объекту "'.$row['build_name'].
				'" за "'.$row['incp_bank_date'].'" уже существует.', 1);
        }    
		$recset->closeCursor();

// Пишем данные
        $sqlreq =   'INSERT INTO incpays ( incp_bank_date, incp_amount, incp_job_id, incp_itp_id, '.
								'incp_pm_type, incp_cli_id, incp_build_id, incp_content, incp_account, '.
								'incp_contract, incp_comment, incp_key, incp_user_id ) '.
                    'VALUES ('. $db->quote($incp_bank_date).", ".$db->quote($incp_amount).", ".
								$db->quote($incp_job_id).", ".$db->quote($incp_itp_id).", ".
								$db->quote($incp_pm_type).", ".$db->quote($incp_cli_id).", ".
								$db->quote($incp_build_id).", ".$db->quote($incp_content).", ".
								$db->quote($incp_account).", ".$db->quote($incp_contract).", ".
                                $db->quote($incp_comment).", ".$db->quote($incp_key).", ".
								$db->quote($incp_user_id). ")";
												
		$db->exec($sqlreq);
    }
	catch (PDOException $e) {
		$errcode = 1;
		$errmess = ERR_M::DATABASE_ERROR;
	}
    catch ( Exception $e ) {
		$errcode = $e->getCode();
		$errmess = $e->getMessage();
	}

	return array('errcode'=>$errcode,'errmess'=>$errmess);
  }

  public function update() {
	
    $incp_id		= isset($_POST['id']) ? trim(strip_tags($_POST['id'])) : '';
    $incp_job_id	= isset($_POST['incp_job_id']) ? trim(strip_tags($_POST['incp_job_id'])) : '';
    $incp_itp_id	= isset($_POST['incp_itp_id']) ? trim(strip_tags($_POST['incp_itp_id'])) : '';
    $incp_bank_date	= isset($_POST['incp_bank_date']) ? trim(strip_tags($_POST['incp_bank_date'])) : '';
    $incp_amount	= isset($_POST['incp_amount']) ? trim(strip_tags($_POST['incp_amount'])) : '';
    $incp_pm_type	= isset($_POST['incp_pm_type']) ? trim(strip_tags($_POST['incp_pm_type'])) : '';
    $incp_cli_id	= isset($_POST['incp_cli_id']) ? trim(strip_tags($_POST['incp_cli_id'])) : '';
    $cli_name 		= isset($_POST['cli_name']) ? trim(strip_tags($_POST['cli_name'])) : '';
    $incp_build_id	= isset($_POST['incp_build_id']) ? trim(strip_tags($_POST['incp_build_id'])) : '';
    $build_name		= isset($_POST['build_name']) ? trim(strip_tags($_POST['build_name'])) : '';
    $incp_content 	= isset($_POST['incp_content']) ? trim(strip_tags($_POST['incp_content'])) : '';
    $incp_account 	= isset($_POST['incp_account']) ? trim(strip_tags($_POST['incp_account'])) : '';
    $incp_contract	= isset($_POST['incp_contract']) ? trim(strip_tags($_POST['incp_contract'])) : '';
    $incp_comment	= isset($_POST['incp_comment']) ? trim(strip_tags($_POST['incp_comment'])) : '';
	
	$errcode = 0;
	$errmess = '';
    try
    {
// Открываем базу данных
		$db = App::me()->dbOpen();	

// Только зарегистрированные пользователи могут вносить данные
		if( !isset($_SESSION['user_id']) || $_SESSION['user_id'] == 0 )
			throw new Exception(ERR_M::TIMEOUT_ERROR, 999);
		$incp_user_id = $_SESSION['user_id'];

// Есть ли разрешение на изменение чьей либо записи
		$rwd = $_SESSION['priv']->incpays->rwd;
		if( ($rwd & PERM_BITS::WRITE_ANY) == 0 ) throw new Exception(ERR_M::DATA_OPER_DISABLED, 99);
		
// Все ли данные переданы
		$errdata = "";
		
// incp_id
		if( $incp_id == '' ) $errdata = "Не указан идентификатор платежа.";

// incp_job_id
		if( !$incp_job_id || !ctype_digit($incp_job_id) )
			$errdata .= ($errdata?'<br>':'').'- Не указан идентификатор работы.';
			
// incp_itp_id
		if( !$incp_itp_id || !ctype_digit($incp_itp_id) )
			$errdata .= ($errdata?'<br>':'').'- Не указан идентификатор вида платежа.';
			
// incp_bank_date
		if( $incp_bank_date == '' ) $errdata .= ($errdata?'<br>':'')."- Не указана дата оплаты.";
		elseif( ( $incp_bank_date = Tools::check_date($incp_bank_date) ) === false )
			$errdata .= ($errdata?'<br>':'')."- Дата оплаты указана неправильно.";

// incp_amount			
		if( $incp_amount == '' ) $errdata .= ($errdata?'<br>':'')."- Не указана сумма оплаты.";
		else {
			$incp_amount = str_replace(',', '.', $incp_amount);
			if( !is_numeric( $incp_amount ) )
				$errdata .= ($errdata?'<br>':'')."- Неправильно указана сумма оплаты.";
		}
			
// incp_pm_type			
		if( $incp_pm_type == '' ) $errdata .= ($errdata?'<br>':'')."- Не указан вид платежа.";
/*		else {
			$incp_pm_type = preg_replace( '/[^A-Z0-9]/u', '', mb_strtoupper( $incp_pm_type, 'UTF-8') );
		} */
			
// incp_cli_id  cli_name			
		if( $cli_name == '' ) $errdata .= ($errdata?'<br>':'').'- Не указано имя клиента.';
		elseif( !ctype_digit( $incp_cli_id ) ) 
			$errdata .= ($errdata?'<br>':'').'- Не указан идентификатор клиента.';
		else {
// Проверяем наличие кода клиента в справочнике
			$recset = $db->query('SELECT cli_id FROM clients WHERE cli_id = '.$db->quote($incp_cli_id));                  
			$row = $recset->fetch(PDO::FETCH_ASSOC);
			if( !$row ) {
				$errdata .= ($errdata?'<br>':'').'- Неправильно указан идентификатор клиента.';
			}
			$recset->closeCursor();
		}
		
// incp_build_id  build_name
		if( $build_name == '' ) $errdata .= ($errdata?'<br>':'').'- Не указан шифр объекта.';
		elseif( !ctype_digit( $incp_build_id ) ) 
			$errdata .= ($errdata?'<br>':'').'- Не указан идентификатор объекта.';
		else {
// Проверяем наличие обьекта в справочнике
			$recset = $db->query('SELECT build_id FROM builds WHERE build_id = '.$db->quote($incp_build_id));                  
			$row = $recset->fetch(PDO::FETCH_ASSOC);
			if( !$row ) {
				$errdata .= ($errdata?'<br>':'').'- Неправильно указан идентификатор объекта.';
			}
			$recset->closeCursor();
		}
		
// incp_content
		if( $incp_content == '' ) $errdata .= ($errdata?'<br>':'').'- Не указано назначение платежа.';
		
// incp_account
		if( $incp_account == '' ) $errdata .= ($errdata?'<br>':'').'- Не указан номер счета.';
		
// Если есть ошибки - можно закончить
		if( $errdata ) throw new Exception($errdata, 1);
		
// Есть ли разрешение на апдейт этой записи
		if( $rwd & PERM_BITS::WRITE_OTH ) $where = '1 = 1';
		elseif( $rwd & PERM_BITS::WRITE_GRP ) 
			$where = 'incp_user_id IN (SELECT user_id FROM users WHERE cat_id = '.$_SESSION['cat_id'].')';
		elseif( $rwd & PERM_BITS::WRITE_OWN ) $where = 'incp_user_id = '.$_SESSION['user_id'];
		else $where = '1 = 0';
		$where .= ' AND incp_id = '.$db->quote($incp_id);
		
		$sqlreq = 'SELECT COUNT(*) AS count FROM incpays WHERE '.$where.' LIMIT 1';
		$recset = $db->query( $sqlreq );		
		$row = $recset->fetch(PDO::FETCH_ASSOC);
		if( !$row['count'] ) {
			throw new Exception(ERR_M::DATA_OWNER_DISABLED, 99);
        }    
		$recset->closeCursor();
		
// Может быть объект с указаным именем уже существует
		$incp_key1 = preg_replace( '/[^0-9]/u', '', $incp_bank_date );
		$incp_key2 = preg_replace( '/[^а-яіїa-z0-9]/u', '', mb_strtolower( $incp_account, 'UTF-8') );
		$incp_key  = substr( $incp_key1.' '.$incp_build_id.' '.$incp_key2, 0, 64);
		
		$sqlreq =	'SELECT incp_account, build_name, incp_bank_date FROM incpays '.
					'INNER JOIN builds ON builds.build_id = incpays.incp_build_id '.
					'WHERE incp_key = '.$db->quote($incp_key).' AND '.
							'incp_id != '.$db->quote($incp_id);
							
		$recset = $db->query( $sqlreq );
		
		$row = $recset->fetch(PDO::FETCH_ASSOC);
		if( $row ) {
			throw new Exception('Счет с номером "'.$row['incp_account'].'" по объекту "'.$row['build_name'].
				'" за "'.$row['incp_bank_date'].'" уже существует.', 1);
        }    
		$recset->closeCursor();

// Пишем данные
        $sqlreq =   'UPDATE incpays SET '.
						'incp_bank_date = '. $db->quote($incp_bank_date).', '.
						'incp_amount = '.	$db->quote($incp_amount).", ".
						'incp_job_id = '.	$db->quote($incp_job_id).", ".
						'incp_itp_id = '.	$db->quote($incp_itp_id).", ".
						'incp_pm_type = '.	$db->quote($incp_pm_type).", ".
						'incp_cli_id = '.	$db->quote($incp_cli_id).", ".
						'incp_build_id = '.	$db->quote($incp_build_id).", ".
						'incp_content = '.	$db->quote($incp_content).", ".
						'incp_account = '.	$db->quote($incp_account).", ".
						'incp_contract = '.	$db->quote($incp_contract).", ".
						'incp_comment = '.	$db->quote($incp_comment).", ".
						'incp_key = '.		$db->quote($incp_key)." ".
                    'WHERE incp_id = '.$db->quote($incp_id);
												
		$db->exec($sqlreq);
    }
	catch (PDOException $e) {
		$errcode = 1;
		$errmess = ERR_M::DATABASE_ERROR;
	}
    catch ( Exception $e ) {
		$errcode = $e->getCode();
		$errmess = $e->getMessage();
	}

	return array('errcode'=>$errcode,'errmess'=>$errmess);
  }
  
  
  public function delete() {
    $errmess = "";
	$errcode = 0;
		
    $incp_ids = (isset($_REQUEST['id']) && $_REQUEST['id'] != '') ?
        explode(",", $_REQUEST["id"], 100) : array();

    try
    {
// Только зарегистрированные пользователи могут удалять данные
		if( !isset($_SESSION['user_id']) || $_SESSION['user_id'] == 0 )
			throw new Exception(ERR_M::TIMEOUT_ERROR, 999);

// Есть ли разрешение на удаление хоть какой либо записи
		$rwd = $_SESSION['priv']->incpays->rwd;
		if( ($rwd & PERM_BITS::DELETE_ANY) == 0 ) throw new Exception(ERR_M::DATA_OPER_DISABLED, 99);
		
        if (!Tools::is_numeric_array( $incp_ids ))
			throw new Exception(ERR_M::PROTOCOL_ERROR, 1);
        
		$incp_id_list = implode(',', $incp_ids);

// Открываем базу данных
		$db = App::me()->dbOpen();	

// Есть ли разрешение на удаление этих записей
		if( $rwd & PERM_BITS::DELETE_OTH ) $where = '1 = 1';
		elseif( $rwd & PERM_BITS::DELETE_GRP ) 
			$where = 'incp_user_id IN (SELECT user_id FROM users WHERE cat_id = '.$_SESSION['cat_id'].')';
		elseif( $rwd & PERM_BITS::DELETE_OWN ) $where = 'incp_user_id = '.$_SESSION['user_id'];
		else $where = '1 = 0';
		$where .= ' AND incp_id IN ('.$incp_id_list.')';
		
		$sqlreq = 'SELECT COUNT(*) AS count FROM incpays WHERE '.$where;
		$recset = $db->query( $sqlreq );		
		$row = $recset->fetch(PDO::FETCH_ASSOC);
		if( $row['count'] != count($incp_ids) ) {
			throw new Exception(ERR_M::DATA_OWNER_DISABLED, 99);
        }    
		$recset->closeCursor();
		
// Удаляем записи из таблицы
        $sqlreq = "DELETE FROM incpays WHERE incp_id IN (".$incp_id_list.")";
        $db->exec($sqlreq);
	}
	catch (PDOException $e) {
		$errcode = 1;
		$errmess = ERR_M::DATABASE_ERROR;
	}
    catch ( Exception $e ) {
		$errcode = $e->getCode();
		$errmess = $e->getMessage();
	}

	return array('errcode'=>$errcode,'errmess'=>$errmess);
  }
}
?>